IP Address Binding এবং Port Allocation

Computer Programming - ইউনিক্স সকেট (Unix Socket) Socket Addressing এবং Binding (Socket Addressing and Binding) |
244
244

IP Address Binding এবং Port Allocation নেটওয়ার্ক প্রোগ্রামিং এবং সংযোগ ব্যবস্থাপনার ক্ষেত্রে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। এ দুটি প্রক্রিয়া Socket-এর মাধ্যমে সঠিকভাবে সংযোগ স্থাপন এবং ডেটা আদান-প্রদানের জন্য প্রয়োজনীয়। নিচে IP Address Binding এবং Port Allocation-এর ব্যাখ্যা এবং প্রয়োজনীয়তা নিয়ে বিস্তারিত আলোচনা করা হলো।

IP Address Binding

IP Address Binding হলো Socket-কে একটি নির্দিষ্ট IP Address-এর সাথে সংযুক্ত করার প্রক্রিয়া। এটি Socket-এর মাধ্যমে নেটওয়ার্কে সুনির্দিষ্ট IP Address থেকে ডেটা পাঠানো এবং গ্রহণ করা সম্ভব করে তোলে।

IP Address Binding এর ধাপ

Address Family নির্ধারণ করা:

  • IP Address Binding-এর ক্ষেত্রে প্রথম ধাপ হলো Address Family নির্ধারণ করা, যেমন IPv4 (AF_INET) বা IPv6 (AF_INET6)।

Socket তৈরি করা:

  • Address Family এবং Socket Type অনুযায়ী একটি Socket তৈরি করা হয়। উদাহরণস্বরূপ, একটি TCP Socket তৈরি করার জন্য socket() ফাংশন ব্যবহার করা হয়:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);

Address Structure সেটআপ করা:

  • Binding-এর জন্য struct sockaddr_in (IPv4) বা struct sockaddr_in6 (IPv6) ব্যবহার করে Address Structure সেটআপ করা হয়। IP Address এবং Port Number সঠিকভাবে নির্ধারণ করা হয়:
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET; // IPv4 Address Family
server_addr.sin_addr.s_addr = INADDR_ANY; // যে কোনো IP Address গ্রহণ করতে
server_addr.sin_port = htons(8080); // পোর্ট নম্বর
  • INADDR_ANY ব্যবহার করা হলে, সার্ভার সমস্ত নেটওয়ার্ক ইন্টারফেসের (উদাহরণস্বরূপ, লোকালহোস্ট এবং অন্যান্য ইন্টারফেস) জন্য ইনকামিং সংযোগ গ্রহণ করতে প্রস্তুত থাকে।

Binding করা:

  • bind() ফাংশন ব্যবহার করে Socket-কে IP Address এবং Port Number-এর সাথে সংযুক্ত করা হয়:
if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
   perror("Bind failed");
   close(sockfd);
   exit(EXIT_FAILURE);
}

Port Allocation

Port Allocation হলো একটি Socket-কে নির্দিষ্ট Port Number দিয়ে সংযুক্ত করা, যাতে প্রক্রিয়াগুলো নেটওয়ার্কে ডেটা পাঠাতে এবং গ্রহণ করতে পারে। Port Allocation নেটওয়ার্কে বিভিন্ন সার্ভিস এবং অ্যাপ্লিকেশন আলাদা করতে সাহায্য করে। এটি বিভিন্ন TCP এবং UDP সার্ভিসগুলোর জন্য ভিন্ন পোর্ট ব্যবহার নিশ্চিত করে।

Port Allocation এর গুরুত্ব

প্রক্রিয়া এবং সার্ভিস সনাক্তকরণ:

  • Port Number একটি ১৬-বিট সংখ্যা যা প্রক্রিয়া এবং সার্ভিস সনাক্তকরণের জন্য ব্যবহৃত হয়। এটি TCP এবং UDP সেগমেন্টে অন্তর্ভুক্ত করা হয় এবং একটি নির্দিষ্ট সার্ভিসের সাথে সংযোগ স্থাপন করতে সাহায্য করে।
  • উদাহরণস্বরূপ:
    • HTTP এর জন্য পোর্ট ৮০
    • HTTPS এর জন্য পোর্ট ৪৪৩
    • FTP এর জন্য পোর্ট ২১

প্রক্রিয়াগুলোর মধ্যে আলাদা সংযোগ নিশ্চিত করা:

  • একাধিক সার্ভিস বা অ্যাপ্লিকেশন একই ডিভাইসে আলাদা পোর্ট ব্যবহার করে কাজ করতে পারে। Port Allocation এই পোর্টগুলোকে আলাদা করতে এবং নির্দিষ্ট সার্ভিসের সাথে সংযোগ স্থাপনে সহায়ক।

Well-known এবং Dynamic Ports:

  • Port Number তিনটি প্রধান শ্রেণিতে বিভক্ত:
    • Well-known Ports (0-1023): এই পোর্টগুলো সাধারণত স্ট্যান্ডার্ড সার্ভিসগুলোর জন্য সংরক্ষিত, যেমন HTTP, HTTPS, FTP।
    • Registered Ports (1024-49151): এই পোর্টগুলো নির্দিষ্ট অ্যাপ্লিকেশন এবং সার্ভিসের জন্য সংরক্ষিত থাকে, তবে সেগুলোকে ভালোভাবে ডকুমেন্ট করতে হয়।
    • Dynamic/Private Ports (49152-65535): এই পোর্টগুলো অস্থায়ী বা ডাইনামিক অ্যাপ্লিকেশন এবং সার্ভিসের জন্য ব্যবহার করা হয়, যেখানে কোনো নির্দিষ্ট প্রক্রিয়া সেই পোর্টগুলো ব্যবহার করে।

Security এবং Access Control:

  • নির্দিষ্ট Port Number ব্যবহারের মাধ্যমে সার্ভিসগুলোর নিরাপত্তা নিশ্চিত করা যায়। সার্ভার শুধুমাত্র নির্দিষ্ট পোর্টে ইনকামিং সংযোগ গ্রহণ করতে পারে, যা unauthorized access প্রতিরোধে সহায়ক।

IP Address Binding এবং Port Allocation উদাহরণ (C ভাষায়)

নিচে একটি TCP Server-এর উদাহরণ দেওয়া হলো যেখানে IP Address Binding এবং Port Allocation করা হয়েছে:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 8080

int main() {
    int server_fd;
    struct sockaddr_in server_addr;

    // 1. Socket তৈরি করা
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 2. ঠিকানা সেটআপ করা
    server_addr.sin_family = AF_INET; // IPv4 Address Family
    server_addr.sin_addr.s_addr = INADDR_ANY; // যে কোনো IP Address গ্রহণ করতে
    server_addr.sin_port = htons(PORT); // পোর্ট নম্বর

    // 3. Binding করা
    if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    printf("Socket successfully bound to port %d\n", PORT);

    // Listening এবং অন্যান্য কাজ এখানে যুক্ত করা যেতে পারে...

    // 4. Socket বন্ধ করা
    close(server_fd);
    return 0;
}

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion